package com.chennan.javabase.domain.shuanf;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * @author chennan
 * @createTime 2021年07月23日 15:44:00
 */
public class CountSum {

    public static void main(String[] args) {
        long l = System.currentTimeMillis();
        System.out.println(new CountSum().countSum(15, new int[]{1, 2, 3, 4,5,123,354,67,7324,7,24,23,61,78,6}));
        long l1 = System.currentTimeMillis();
        System.out.println("时间："+(l1-l));
    }
    //1 2 3 4 9 8 7
    public int countSum(int num,int[] counts){
        Set<Integer>  set = new HashSet<>();
        for (int i = 0; i < num; i++) {
            set.add(counts[i]);
        }
        int count=0;
        for (int i = 0; i < num; i++) {
            count+=single(counts,counts[i],set);
        }
        return count/2;
    }

    public int single(int[] counts,int result,Set<Integer>  set){
        int sum=0;
        for (int count : counts) {
            int temp = result-count;
            if(temp!=count&&set.contains(temp)){
                sum++;
            }
        }
        return sum;
    }

    /**
     * 按钮 1-n
     * 标签颜色  k种 0 - k-1
     * 当按下相同颜色的按钮，两个按钮之间的所有按钮，包括者两个都可以被兑换，积分有p分。
     * 可以有几种按下按钮的方案。
     *
     * 例如：
     * 输入n,k,p n是按钮个数，k是颜色数，p积分，
     * 输出有几种方案：
     *
     * 5 2 3
     *
     * 0 5
     * 1 3
     * 0 2
     * 1 4
     * 1 5
     *
     *
     *
     */


    /**
     * 最大边和最小边的边权差是多少？
     *
     * 输入m+1 行，
     * 第一行两个整数n和m，表示图的顶点数和边数，
     * 接下来m行，每行3个整数u，v，w
     * 表示定点u和v之间有一条权值为w的无向边，输出一个非负整数，表示最大边和最小边的边权差？
     * 若不联通，则输出-1；
     *
     * 4 5
     *  1 2 3
     *  1 3 5
     *  1 4 6
     *  2 4 6
     *  3 4 7
     *
     *
     *  输出  1？？
     *
     *
     */



}
